package com.woniuxy.yoga.course.web.controller;


import cn.hutool.core.bean.BeanUtil;
import com.woniuxy.yoga.commons.core.model.Result;
import com.woniuxy.yoga.course.dao.model.CourseType;
import com.woniuxy.yoga.course.model.dto.type.AllCourseTypeDTO;
import com.woniuxy.yoga.course.model.dto.type.CourseTypeDTO;
import com.woniuxy.yoga.course.model.form.type.AddCourseTypeForm;
import com.woniuxy.yoga.course.model.form.type.QueryAllCourseTypeForm;
import com.woniuxy.yoga.course.model.param.type.AddCourseTypeParam;
import com.woniuxy.yoga.course.model.param.type.QueryAllCourseTypeParam;
import com.woniuxy.yoga.course.service.service.CourseTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * <p>
 * 课程类型表 前端控制器
 * </p>
 *
 * @author 韦用文,刘存益,郎腾霄
 * @since 2023年11月28日
 */
@RestController
@RequestMapping("/courseType")
@Api(tags = "课程类型服务相关业务接口")
@Validated
public class CourseTypeController {

    @Autowired
    private CourseTypeService courseTypeService;

    /**
     * 根据课程类型ID查询课程类型
     * @param courseTypeId
     * @return
     */
    @GetMapping("/getById/{courseTypeId}")
    @ApiOperation("查询课程类型接口")
    @ApiImplicitParam(name = "courseTypeId",value = "课程类型ID")
    public Result<CourseTypeDTO> getById(@Valid @NotNull(message = "课程类型ID不能为空") @PathVariable("courseTypeId") Integer courseTypeId){
        //获取数据
        CourseType courseType = courseTypeService.getById(courseTypeId);
        //对象转换
        CourseTypeDTO courseTypeDTO = BeanUtil.toBean(courseType, CourseTypeDTO.class);
        //返回数据
        return Result.getResult(CourseTypeDTO.class).setMessage("根据课程类型ID查询课程类型成功").setData(courseTypeDTO);
    }

    /**
     * 新增课程类型
     * @param addCourseTypeForm
     * @return
     */
    @PostMapping("/addCourseType.api")
    @ApiOperation("新增课程类型接口")
    public Result<?> addCourseType(@Valid @RequestBody AddCourseTypeForm addCourseTypeForm){
        courseTypeService.addCourseType(BeanUtil.toBean(addCourseTypeForm, AddCourseTypeParam.class));
        return Result.getResult().setMessage("新增课程类型成功");
    }

    /**
     * 课程类型启用
     * @param courseTypeId
     * @return
     */
    @GetMapping("/modifyCourseTypeNormal.api")
    @ApiOperation("课程类型启用接口")
    @ApiImplicitParam(name = "courseTypeId",value = "课程类型ID")
    public Result<?> modifyCourseTypeNormal(@Valid @NotNull(message = "课程类型ID不能为空") @PathVariable("courseTypeId") Integer courseTypeId){
        courseTypeService.modifyCourseTypeNormal(courseTypeId);
        return Result.getResult().setMessage("课程类型启用成功");
    }

    /**
     * 课程类型删除
     * @param courseTypeId
     * @return
     */
    @GetMapping("/modifyCourseTypeDelete.api")
    @ApiOperation("课程类型删除接口")
    @ApiImplicitParam(name = "courseTypeId",value = "课程类型ID")
    public Result<?> modifyCourseTypeDelete(@Valid @NotNull(message = "课程类型ID不能为空") @PathVariable("courseTypeId") Integer courseTypeId){
        courseTypeService.modifyCourseTypeDelete(courseTypeId);
        return Result.getResult().setMessage("课程类型删除成功");
    }

    /**
     * 查询所有的课程类型
     * @param queryAllCourseTypeForm
     * @return
     */
    @PostMapping("/queryAllCourseType.api")
    @ApiOperation("商家查询所有的课程类型接口")
    public Result<List<AllCourseTypeDTO>> queryAllCourseType(@RequestBody QueryAllCourseTypeForm queryAllCourseTypeForm){
        List<AllCourseTypeDTO> allCourseTypeDTOS = courseTypeService.queryAllCourseType(BeanUtil.toBean(queryAllCourseTypeForm, QueryAllCourseTypeParam.class));
        return Result.getListResult(AllCourseTypeDTO.class).setMessage("查询所有的课程类型成功").setData(allCourseTypeDTOS);
    }
}

